package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class ItemServiceImpl implements ItemService {

 @Autowired
 private ItemCatMapper itemCatMapper;


 public Map<Integer, List<ItemCat>> getMap() {
  Map<Integer, List<ItemCat>> map = new HashMap<>();
  List<ItemCat> list = itemCatMapper.selectList(null);
  for (ItemCat itemCat : list) {
   if (map.containsKey(itemCat.getParentId())) {
    map.get(itemCat.getParentId()).add(itemCat);
   } else {
    List<ItemCat> initList = new ArrayList<>();
    initList.add(itemCat);
    map.put(itemCat.getParentId(), initList);
   }
  }
  return map;
 }

  public List<ItemCat> findItemCatList (Integer type) {
//   List<ItemCat> catList = new ArrayList<>();
   Map<Integer, List<ItemCat>> map = getMap();
   if (type == 1) {
    //??优化!!!
    return map.get(0);
   }

   if (type == 2) {
    //优化
//    QueryWrapper<ItemCat> queryWrapper0 = new QueryWrapper<>();
//    queryWrapper0.eq("parent_id", 0);
//    catList = itemCatMapper.selectList(queryWrapper0);
//
//    for (ItemCat items : catList) {
//     QueryWrapper<ItemCat> queryWrapper2 = new QueryWrapper<>();
//     queryWrapper2.eq("parent_id", items.getId());
//     List<ItemCat> catList2 = itemCatMapper.selectList(queryWrapper2);
//     items.setChildren(catList2);
//    }

    return getLevel2(map);
   }


   if (type == 3) {
//    //1.查询1级商品分类信息
//    QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
//    queryWrapper.eq("parent_id", 0);
//    catList = itemCatMapper.selectList(queryWrapper);
//
//    for (ItemCat items : catList) {
//     QueryWrapper<ItemCat> queryWrapper2 = new QueryWrapper<>();
//     queryWrapper2.eq("parent_id", items.getId());
//     List<ItemCat> catList2 = itemCatMapper.selectList(queryWrapper2);
//     items.setChildren(catList2);
//     //怎么封装??? 要求性能高
//     for (ItemCat items3 : catList2) {
//      QueryWrapper<ItemCat> queryWrapper3 = new QueryWrapper<>();
//      queryWrapper3.eq("parent_id", items3.getId());
//      List<ItemCat> catList3 = itemCatMapper.selectList(queryWrapper3);
//      items3.setChildren(catList3);
//     }
//
//    }

    //减少与数据库的交互次数，提高效率

//   }
//   return catList;

    return getLevel3(map);
   }
   return null;
  }

 @Override
 @Transactional
 public void updateStatus(ItemCat itemCat) {
  itemCatMapper.updateById(itemCat);
 }


// @Override
// public void deleteItem(ItemCat itemCat) {
//  itemCatMapper.deleteById(itemCat);
// }

 @Override
 public void addItem(ItemCat itemCat) {
  itemCat.setStatus(true);
  itemCatMapper.insert(itemCat);
 }

 @Override
 public void deleteItem(Integer id, Integer level) {
  if(level==3){
   itemCatMapper.deleteById(id);
  }

  if(level==2){
   QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
   queryWrapper.eq("parent_id",id);
   itemCatMapper.deleteById(queryWrapper);
   itemCatMapper.deleteById(id);
  }

  if(level==1){
   QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
   queryWrapper.eq("parent_id",id);
//   List<ItemCat> twoList=itemCatMapper.selectList(queryWrapper);
   List twoIdList=itemCatMapper.selectObjs(queryWrapper);//获得第一列数据

   for(Object twoId:twoIdList){

    QueryWrapper<ItemCat> queryWrapper2=new QueryWrapper<>();
    queryWrapper2.eq("parent_id",twoId);
    itemCatMapper.deleteById(queryWrapper2);

    Integer intTwoId=(Integer)twoId;
    itemCatMapper.deleteById(intTwoId);
   }
   itemCatMapper.deleteById(id);
  }
 }

 private List<ItemCat> getLevel3(Map<Integer, List<ItemCat>> map) {
  List<ItemCat> list=getLevel2(map);
  for(ItemCat itemCat1:list){
   List<ItemCat> list2=itemCat1.getChildren();
   if(list2==null) continue;
   for(ItemCat itemCat2:list2){
    List<ItemCat> list3=map.get(itemCat2.getId());
    itemCat2.setChildren(list3);
   }
   itemCat1.setChildren(list2);
  }
  return list;
 }

 private List<ItemCat> getLevel2(Map<Integer, List<ItemCat>> map) {
  List<ItemCat> list=map.get(0);

  for(ItemCat itemCat:list){
   List<ItemCat> twoList=map.get(itemCat.getId());
   itemCat.setChildren(twoList);
 }
 return list;
}
}





























